import axios from 'axios';
import { Message } from "element-ui";

// create
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000,
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
});

// 请求拦截
service.interceptors.request.use(
  config => {
    window.location.href = "/login";
    return config;
  },
  error => {
    return Promise.reject();
  }
);

// 响应拦截
service.interceptors.response.use(
  async (response) => {
    if (response.status === 200) {
      await responseStatus(response.data)
      return response.data;
    } else {
      return Promise.reject();
    }
  },
  (error) => {
    const { request } = error
    // 请求拦截会
    process.env.NODE_ENV === 'development' ? httpErrorStatus(request) : ''
    return Promise.reject();
  }
);
// http状态码错误提醒
function httpErrorStatus({ status }) {
  const httpCodeMap = new Map([
    // 2开头，请求被正确处理
    [200, '200 - 请求被正确处理'],
    [204, '204 - 请求被受理但是无资源返回'],
    [206, '206 - 客户端只请求资源的一部分'],
    // 3开头，需要进一步操作
    [301, '301 - 永久性重定向'],
    [302, '302 - 临时重定向'],
    [303, '303 - 客户端只请求资源的一部分'],
    // 4开头，一般是客户端问题
    [401, '401 - 没有访问权限，需要进行身份认证。'],
    [404, '404 - 接口路径找不到'],
    // 5开头，一般是服务端问题
    [502, '502 - 服务器挂了或者正在重启发版'],
    [0, '0 - 服务器未定义的错误'],
  ])
  alert(httpCodeMap.get(status))
}
// 后端自定义的响应码
function responseStatus({ retCode, retMessage, respCode, respMsg, result }) {

  return new Promise((resolve, reject) => {
    if (retCode === '100') {
      Message.success(retMessage)
      resolve()
    } else if (result && result.result_code === '1') {
      Message.success(result.desc)
      resolve()
    } else if (respCode === '00') {
      Message.success(retMessage)
      resolve()
    } else {
      retMessage ? Message.error(retMessage) : respMsg ? Message.error(respMsg) : result ? Message.error(result.desc) : ''
      reject()
    }
  })
}

export default service;
